1   package uba.db.sql.language;
2   
3   import junit.framework.TestCase;
4   import uba.db.testhelpers.TestUtils;
5   
6   /***
7    * @version $Revision: 1.6 $
8    */
9   public class SelectTest extends TestCase {
10      private static final TableSelectionSource FROM_B = new TableSelectionSource(
11              new TableName("B"));
12      private static final SingleSelectionCriteria D_EQ_E = new SingleSelectionCriteria(
13              new EqualComparison(new ColumnName("d"), new ColumnName("e")));
14      private static final SingleSelectionCriteria AC_EQ_BC = new SingleSelectionCriteria(
15              new EqualComparison(new TableName("A").column("c"), new TableName("B")
16                      .column("c")));
17      private static final Join FROM_AB = new TableSelectionSource("A")
18              .join(new TableSelectionSource("B"));
19      private static final Select SELECT_FROMAB_WHERE_AC_EQ_BC = new Select(FROM_AB,
20              AC_EQ_BC);
21      private static final TableSelectionSource FROM_A = new TableSelectionSource(
22              new TableName("A"));
23  
24      /***
25       * Test para acceder a los "componentes" que conforman un "SELECT"
26       */
27      public void testAccessors() {
28          assertEquals(new DisplayAllColumns(), new Select(FROM_A).displayColumns());
29          assertEquals(FROM_A, new Select(FROM_A).source());
30          assertEquals(new NullSelectionCriteria(), new Select(FROM_A).criteria());
31      }
32  
33      /***
34       * Test de igualdad entre dos instancias, selects del tipo: SELECT A.c,d
35       * FROM A,B WHERE A.c=B.c.
36       */
37      public void testEqualsSelect() {
38          DisplayColumns displayColumns = new DisplayOneColumn(new TableName("A")
39                  .column("c")).append(new DisplayOneColumn(new ColumnName("d")));
40  
41          SingleSelectionCriteria selectionCriteria = AC_EQ_BC;
42  
43          Select select = new Select(displayColumns, FROM_AB, selectionCriteria);
44          Select sameSelect = new Select(displayColumns, FROM_AB, selectionCriteria);
45  
46          TestUtils.assertEqualsImplementation(select, sameSelect, new Select(FROM_A));
47      }
48  
49      /***
50       * Test de igualdad entre dos instancias, selects del tipo: SELECT *, A.c,d
51       * FROM A,B WHERE A.c=B.c.
52       */
53      public void testEqualsSelectWithColumnsWildcard() {
54          DisplayColumns displayColumns = new DisplayAllColumns()
55                  .append(new DisplayOneColumn(new TableName("A").column("c"))
56                          .append(new DisplayOneColumn(new ColumnName("d"))));
57  
58          SingleSelectionCriteria selectionCriteria = AC_EQ_BC;
59  
60          Select select = new Select(displayColumns, FROM_AB, selectionCriteria);
61          Select sameSelect = new Select(displayColumns, FROM_AB, selectionCriteria);
62  
63          TestUtils.assertEqualsImplementation(select, sameSelect, new Select(FROM_A));
64      }
65  
66      /***
67       * Test de igualdad entre dos instancias, selects de mas de una tabla:
68       * SELECT * FROM A,B.
69       */
70      public void testEqualsSelectWithJoin() {
71          TestUtils.assertEqualsImplementation(new Select(FROM_AB),
72                                               new Select(FROM_AB),
73                                               new Select(FROM_B));
74      }
75  
76      /***
77       * Test de igualdad entre dos instancias, selects de mas de una tabla y con
78       * criterio de seleccion de filas SELECT * FROM A,B WHERE A.c=B.c.
79       */
80      public void testEqualsSelectWithQualifiedSimpleWhere() {
81          TestUtils.assertEqualsImplementation(SELECT_FROMAB_WHERE_AC_EQ_BC, new Select(
82                  FROM_AB, AC_EQ_BC), new Select(FROM_B));
83      }
84  
85      /***
86       * Test de igualdad entre dos instancias, selects de mas de una tabla y con
87       * criterio de seleccion de filas SELECT * FROM A,B WHERE d=e.
88       */
89      public void testEqualsSelectWithSimpleWhere() {
90          TestUtils.assertEqualsImplementation(new Select(FROM_AB, D_EQ_E), new Select(
91                  FROM_AB, D_EQ_E), new Select(FROM_B));
92      }
93  
94      /***
95       * Test de igualdad entre dos instancias, selects simples del tipo: SELECT *
96       * FROM table.
97       */
98      public void testSimpleSelectEquals() {
99          TestUtils.assertEqualsImplementation(new Select(FROM_A),
100                                              new Select(FROM_A),
101                                              new Select(FROM_B));
102     }
103 }